package genetica.data.viajante;

import java.util.ArrayList;
import java.util.HashMap;

import genetica.cromosomas.genes.GenNaturalLimitado;

public class Ruta1 implements RutasInvalidas {
	private static final int LUNES 		= 0;
	private static final int L			= LUNES;
	private static final int MARTES 	= 1;
	private static final int M 			= MARTES;
	private static final int MIERCOLES 	= 2;
	private static final int X 			= MIERCOLES;
	private static final int JUEVES 	= 3;
	private static final int J 			= JUEVES;
	private static final int VIERNES 	= 4;
	private static final int V 			= VIERNES;
	private static final int SABADO 	= 5;
	private static final int S 			= SABADO;
	private static final int DOMINGO 	= 6;
	private static final int D 			= DOMINGO;
	private static final byte DIAS		= 7;
	// CIUDADES DIAS
	private static final HashMap<Integer,ArrayList<Integer>> relaccionDeDias = new HashMap<Integer, ArrayList<Integer>>();
	static {
		ArrayList<Integer> dias;String nombre;
		dias = new ArrayList<Integer>();  
		
		nombre = "Madrid";
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Albacete"; 
		dias.add(V); 
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);

		nombre = "Alicante";
		dias.add(J);dias.add(V);
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);

		nombre = "Almería";
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);

		nombre = "Avila";
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Badajoz";
		dias.add(M);
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Barcelona";
		dias.add(X);dias.add(V);
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Bilbao";
		dias.add(L);dias.add(V);
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Burgos";
		dias.add(L);
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Cáceres";
		dias.add(J);
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Cádiz";
		dias.add(J);dias.add(V);
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Castellón";
		dias.add(V);
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Ciudad Real";
		dias.add(L);dias.add(M);
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Córdoba";
		dias.add(X);
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "A Coruña";
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Cuenca";
		dias.add(J);dias.add(V);
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Gerona";
		dias.add(X);dias.add(J);dias.add(V);
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Granada";
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Guadalajara";
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Huelva";
		dias.add(L);
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Huesca";
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Jaén";
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "León";
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Lérida";
		dias.add(L);dias.add(M);dias.add(X);
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Logroño";
		dias.add(X);
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Lugo";
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Málaga";
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		nombre = "Murcia";
		dias.add(L);
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
		
		
		nombre = "MADRID"; // TODOS LOS DIAS
		relaccionDeDias.put(Distancias.getCodificacionCiudad(nombre), dias);
	}
	
	@Override
	public boolean destinoValido(int dia, int ciudadDestino) {
		ArrayList<Integer> list = relaccionDeDias.get(ciudadDestino);
		if (list.contains(dia % DIAS)){
			return false;
		}
		return true;
	}
	
	public String toString(){
		return "Ruta con restricciones 1";
	}

}
